//#include <stdio.h>
//#include <ctype.h>
//
//int my_atoi(const char* str)
//{
//    int ret = 0;
//
//    while (str && *str != ' ' && isdigit(*str))
//    {
//        ret = ret * 10 + *str + (0 - '0');
//        str++;
//    }
//
//    return ret;
//}
//
////int main(void)
////{
////    const char* str1 = "42";
////    const char* str2 = "3.14159";
////    const char* str3 = "31337 with words";
////    const char* str4 = "words and 2";
////
////    int num1 = my_atoi(str1);
////    int num2 = my_atoi(str2);
////    int num3 = my_atoi(str3);
////    int num4 = my_atoi(str4);
////
////    printf("%d\n", num1);
////    printf("%d\n", num2);
////    printf("%d\n", num3);
////    printf("%d\n", num4);
////}
//
//int main(int argc, char* argv[])
//{
//	if(1 >= argc)
//	{
//		printf("usage:hello name\n");
//		return 0;
//	}
//	printf("Hello World %s!\n",argv[1]);
//	return 0;
//}

//#include <stdio.h>
//
//int main(void)
//{
//	FILE* pFile;
//	
//	//打开文件,以文本格式打开,写模式
//	pFile = fopen("myfile.txt", "w"); 
//	
//	//文件i操作
//	if (pFile == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	
//	fputs ("fopen example", pFile);
//	
//	//关闭文件
//	fclose(pFile);
//	
//	return 0;
//}

//#include <stdio.h>
//
//int main(void)
//{
//    FILE* pFile;
//
//    //打开文件,以文本格式打开,读模式
//    pFile = fopen("myfile.txt", "r");
//
//    //文件操作
//    if (pFile == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
// 
//    fputs ("fopen example", pFile);
// 
//    //关闭文件
//    fclose(pFile);
// 
//    return 0;
//}

//#include <stdio.h>

//int main(void)
//{
//    FILE* pFile;
//
//    //打开文件,以文本格式打开,写模式
//    pFile = fopen("//root//myfile.txt", "w");
//
//    //文件i操作
//    if (pFile == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
// 
//    fputs ("fopen example", pFile);
// 
//    //关闭文件
//    fclose(pFile);
// 
//    return 0;
////}
//#include <stdio.h>
//#include <stdlib.h>     //提供exit()的原型
//
//int main(int argc, char* argv[])
//{
//    int ch;             //读取文件时,存储每个字符的地方
//    FILE* fp;           //文件指针
//    unsigned long count;   
//
//    if (argc != 2)
//    {
//        printf("Usage: %s filename\n", argv[0]);
//        exit(EXIT_FAILURE);
//    }
//
//    if ((fp = fopen(argv[1], "r")) == NULL) //如果文件不存在
//    {
//        printf("Can't open %s\n", argv[1]);
//        exit(EXIT_FAILURE);
//    }
//
//    //读取字符,并打印到屏幕上
//    while((ch = getc(fp)) != EOF)
//    {
//        putc(ch, stdout);   //与 putchar(ch); 相同
//        count++;
//    }
//
//    fclose(fp);
//    fp = NULL;
//    printf("File %s has %lu characters\n", argv[1], count);
//
//    return 0;
//}

//#include <stdio.h>
//
//int main(void)
//{
//    FILE* fp = fopen("myfile.txt", "r");
//    int ret = 0;
//
//    if (fp == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    ret = getc(fp);
//    printf("%d\n", ret);
//    ret = getc(fp);
//    printf("%d\n", ret);
//    ret = getc(fp);
//    printf("%d\n", ret);
//    ret = getc(fp);
//    printf("%d\n", ret);
//
//    fclose(fp);
//    fp = NULL;
//
//    return 0;
//}

//#include <stdio.h>
//#define STLEN 14
//
//int main(void)
//{
//    char words[STLEN];
//
//    puts("Enter a string, please.");
//    fgets(words, STLEN, stdin);
//    printf("puts(), then fputs()\n");
//    puts(words);
//    fputs(words, stdout);
//	
//	puts("Enter a string, please.");
//    fgets(words, STLEN, stdin);
//    printf("puts(), then fputs()\n");
//    puts(words);
//    fputs(words, stdout);
//
//    puts("Done.");
//
//    return 0;
//}

//#include <stdio.h>
//#define STLEN 10
//
//int main(void)
//{
//    char words[STLEN];
//    FILE* fp = fopen("myfile.txt", "r");
//
//    if (fp == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    while(fgets(words, STLEN, fp) != NULL && words[0] != '\n')
//        fputs(words, stdout);
//    puts("Done.");
//
//    return 0;
//}

//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#define MAX 41
//
//int main(void)
//{
//    FILE* fp;
//    char words[MAX];
//
//    //如果访问文件失败
//    if ((fp = fopen("wordy", "a+")) == NULL)
//    {
//        fprintf(stdout, "Can't open \"wordy\" file.\n");
//        exit(EXIT_FAILURE);
//    }
//
//    puts("Enter words to add to the file; press the #");
//    puts("key at the beginning of a line to terminate.");
//
//    while((fscanf(stdin, "%40s", words) == 1) && (words[0] != '#'))
//        fprintf(fp, "%s\n", words);
//    
//    puts("File contents:");
//    rewind(fp);     //返回到文件开始处
//    while(fscanf(fp, "%s", words) == 1)
//        puts(words);
//    puts("Done!");
//
//    if (fclose(fp) != 0)
//        fprintf(stderr, "Error closing file\n");
//    
//    return 0;
//}

#include<stdio.h>
//
//int main(void)
//{
//	FILE* fp = fopen("myfile.txt", "r");
//	char arr[10] = {0,};
//	
//	if (fp == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	fgets(arr, 10, fp);
//	fputs(arr, stdout);
//	fgets(arr, 10, fp);
//	fputs(arr, stdout);
//
//	fclose(fp);
//	fp = NULL;
//	
//	return 0;
//}
//

//#include<stdio.h>
//
//struct S
//{
//	int a;
//	float s;
//};
//
//int main(void)
//{	
//	FILE* fp = fopen("myfile.txt", "r");
//	
//	if (fp == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	struct S s = {0, };
//	fscanf(fp, "%d %f", &(s.a), &(s.s));
//	
//	fprintf(stdout, "%d %f", s.a, s.s);	
//	
//	fclose(fp);
//	fp = NULL;
//	
//	return 0;
//}
//
//	

//#include <stdio.h>
//
//struct S
//{
//	int a;
//	double b;
//};
//
//int main(void)
//{
//	FILE* fp = fopen("myfile", "w+");
//	
//	if (fp == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	struct S s1 = {20, 3.14};
//	struct S s2 = {0,};
//
//	fwrite(&s1, sizeof(struct S), 1, fp);
//	fflush(fp);
//	rewind(fp);
//	fread(&s2, sizeof(struct S), 1, fp);
//	
//	fprintf(stdout, "%d %f\n", s2.a, s2.b);
//
//	return 0;
//}
//#include <stdio.h>
//
//int main(void)
//{
//	char str[] = "This is a test.";
//    FILE* fp = fopen("myfile", "wb");
//    
//    if (fp == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    fwrite(str, sizeof(str), 1, fp);
//
//    fclose(fp);
//    fp = NULL;
//    
//    return 0;
//}

//#include<stdio.h>
//
//#define CNTL_Z '\032'           //DOS 文本文件中的文件结尾标记
//
//int main(void)
//{
//    char ch;
//    FILE* fp;
//    long count, last;
//
//    //如果文件打开失败
//    if ((fp = fopen("myfile", "rb")) == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    fseek(fp, 0L, SEEK_END);                //定位到文件末尾
//    last = ftell(fp);
//
//    for (count = 1L; count <= last; count++)
//    {
//        fseek(fp, -count, SEEK_END);        //回退
//        ch = getc(fp);
//
//        if (ch != CNTL_Z && ch != 'r')
//            putchar(ch);
//    }
//
//    putchar('\n');
//    fclose(fp);
//
//    return 0;
//}

//#include <stdio.h>
//
//int main(void)
//{
//    FILE* fp;
//
//    if ((fp = fopen("myfile", "wb")) == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    fputs("This is an apple.", fp); //将这行句子写入文件
//    fseek(fp, 9L, SEEK_SET);        //定位至文件开始处的第9个字节
//    fputs(" sam", fp);              //重新写入,覆盖
//
//    fclose(fp);
//    fp = NULL;
//    
//    return 0;
//}

//#include <stdio.h>
//
//int main(void)
//{
//    FILE* fp;
//    long size;
//
//    if ((fp = fopen("myfile", "rb")) == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    fseek(fp, 0L, SEEK_END);    //定位到文件结尾
//    size = ftell(fp);           //包括文件结束符号
//    printf("Size of myfile: %ld bytes.\n", size);
//
//    fclose(fp);
//    fp == NULL;
//
//    return 0;
//}

//#include <stdio.h>
//
//int main(void)
//{
//    FILE* fp;
//    long pos = 0;
//
//    if ((fp = fopen("myfile", "rb")) == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    fseek(fp, 0L, SEEK_END);
//    pos = ftell(fp);
//    printf("当前位置相对文件起始位置偏移量为: %ld\n", pos);
//
//    rewind(fp);
//    pos = ftell(fp);
//    printf("使用rewind后,当前位置相对文件起始位置偏移量为: %ld\n", pos);
//    
//    return 0;
//}

//#include<stdio.h>
//
//int main(void)
//{
//    int c;          //用来处理EOF
//    FILE* fp;
//    if ((fp = fopen("myfile", "r")) == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    //fgetc 当读取失败的时候或者遇到文件结束的时候,都会返回EOF
//    while ((c = fgetc(fp)) != EOF)
//    {
//        putchar(c);
//    }
//
//    //判断是什么原因结束的
//    if (ferror(fp))
//    {
//        puts("I/O error when reading");
//    }
//    else if (feof(fp))
//    {
//        puts("End of file reached successfully");
//    }
//
//    fclose(fp);
//    fp = NULL;
//
//    return 0;
//}

#include<stdio.h>

enum{SIZE = 5};

int main(void)
{
    double a[SIZE] = {1.,2.,3.,4.,5.};
    FILE* fp;

    if ((fp = fopen("myfile", "wb")) == NULL)
    {
        perror("fopen");
        return 1;
    }

    fwrite(a, sizeof*a, SIZE, fp);      //写double的数组
    fclose(fp);
    fp = NULL;

    double b[SIZE];
    if ((fp = fopen("myfile", "rb")) == NULL)
    {
        perror("fopen");
        return 1;
    }
	
    size_t ret_code = fread(b, sizeof *b, SIZE, fp);
    if (ret_code == SIZE)
    {
        puts("Array read successfully, contents: ");
		int i = 0;
        for (i = 0; i < SIZE; i++)
            printf("%f ", b[i]);
        putchar('\n');
    }
    else
    {
        if (feof(fp))
            puts("Error reading file: unexpected end of file");
        else if(ferror(fp))
            perror("Error reading file");
    }

    fclose(fp);
    fp = NULL;

    return 0;
}
